<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>i18n &#8211; ChangeLog</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="doc.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p style="background-color: #6D1B1B; text-align:center;"><img src="logo.png" alt="i18n Logo" width="200" height="79" /></p>
<h1><acronym title="Internationalization" lang="en" xml:lang="en">i18n</acronym> &#8211; ChangeLog</h1>
<h2>Version History</h2>
<h3 class="current">1.062<small class="date"> (2003-08-13)</small></h3>
<ul>
	<li>Corrected locale selection bug in the Translator class.</li>
	<li>Corrected <code>HTTP_ACCEPT_LANGUAGE</code> bug.</li>
</ul>
<h3>1.061<small class="date"> (2003-06-23)</small></h3>
<ul>
	<li>Some speed improvements when using the <code>filterSpecialWords()</code> function.
		Also enhanced the <code>wordFilter()</code> function.</li>
	<li>Some code cleanup.</li>
</ul>
<h3>1.060<small class="date"> (2003-06-13)</small></h3>
<ul>
	<li>Finally managed to rewrite the FormatDate class so the formating options can be set in the <var>l10n.ini</var> file.</li>
	<li>Corrected a Bug concerning the changeLocale method.</li>
	<li>Some minor code corrections.</li>
</ul>
<h3>1.057 <small class="date">(2003-05-10)</small></h3>
<ul>
				<li>If the shmop extention is installed, shared memory can be used to store
								and	read the	settings from all the <var>ini</var> files. This way they
								don&#8217;t have to be read with every pagecall. If you change something
								in one of those	files	you	can	set the <code>$flush_sm</code> variable
								in the I18N class to TRUE to reset the shared memory variables. The PHP
								functions for using shared memory are a bit of a pain to work with, but
								I try to use it more often in future releases. Maybe for caching even
								the translation strings since	they are the same for every user anyway&#8230;<br />
								The shared memory function is <strong>not</strong> enabled by default.
								For that you have to set the <code>$use_shared_mem</code> variable in
								the I18N class to TRUE. </li>
				<li>Renamed a couple of variables and functions so it comes closer to the
								PEAR coding standards.</li>
				<li>Removed all user settings from the <var>i18n_settings.ini</var> file,
								since they normally don&#8217;t have to be changed. If you need to change
								them, please edit the I18NUser	class directly.</li>
				<li>Redesigned the <code>getLastUpdateDate()</code> method, to reduce DB
								queries and file access.</li>
</ul>
<h3>1.056 <small class="date">(2003-05-02)</small></h3>
<ul>
				<li>Added an option to the <var>i18n_settings.ini</var> file which allows
								to turn of	alias language checking. if you don&#8217;t use it, it speeds
								thinks	up a little.</li>
				<li>Also shifted	a bit of code to	an abstract base class &#8220;i18n&#8221; and
								tweaked the <code>getLastUpdate()</code> method a little bit.</li>
				<li>Re&#173;named	the User class so it doesn&#8217;t interfere with other
								classes that are	common&#173;ly named &#8220;User&#8221;.</li>
</ul>
<h3>1.055 <small class="date">(2003-04-30)</small></h3>
<ul>
				<li>Changed a bit of the logic of the settings files. There is no <var>currency.ini</var> file
								any more, but therefore	there is a <var>l10n.ini</var> file in each language
								folder	which holds all the regional settings.</li>
				<li>Also added a <code>changeLocale()</code> method to the classes FormatDate,
								FormatNumber, FormatString	and Measure.</li>
				<li>Further added an option to the <var>i18n_settings.ini</var> file which
								allows to turn of locale checking every time a	Translator object	is created.</li>
</ul>
<h3>1.054 <small class="date">(2003-04-20)</small></h3>
<ul>
				<li>Added a lastupdate column to the database layout. If you want to cache
								your pages you can use this information to check if any translations
								are newer than	your cached page.</li>
</ul>
<h3>1.053 <small class="date">(2003-04-15)</small></h3>
<ul>
				<li>Optimized the mysql modus. now a new column &#8220;namespace&#8221; is
								used to speed up things a little bit. if you use that modus you have
								to add that column to the translation table. see the documentation how
								that namespace thing	works.</li>
				<li>Also the way the <var>i18n_settings.ini</var> is read has been changed.
								Instead of reading it	every&#173;time an object is created, it will only
								be read once per page and	stored	in a global variable.</li>
</ul>
<h3>1.052 <small class="date">(2003-04-14)</small></h3>
<ul>
				<li>Corrected some bugs in the language and translator class</li>
</ul>
<h3>1.051 <small class="date">(2003-03-24)</small></h3>
<ul>
				<li>Added some arabic example strings and added a FormatNumbers class for
								formating	numbers, percent values and currencies&#8230;</li>
</ul>
<h3>1.050 <small class="date">(2003-02-24)</small></h3>
<ul>
				<li>Added experimental support for UTF encoded translation files, which means
								that you can use char-sets other than ASCII now. The string functions
								are not really tested with UTF, but should work too. As an example language
								I added Russian. Translated everything with babelfish	again, so don&#8217;t
								get mad at me if the spelling or grammar is all wrong :-). I also	don&#8217;t
								know the correct way of writing Russian date and time strings, so if
								you are from Russia, please e-mail	me how to correct it.</li>
				<li>Corrected some small MySQL bugs&#8230;</li>
</ul>
<h3>1.045 <small class="date">(2003-02-22)</small></h3>
<ul>
				<li>It is now possible to include more than one translation file if you use
								modus &#8220;inc&#8221; or &#8220;gettext&#8221;. To include more that
								one	file write <code>$object = new Translator('language','file1,file2,...');</code> when
								creating a new translation object. Due the limitations of gettext you
								have to add the name of the language file where a translation-string
								can be found	as a	second value when	you use the <code>_()</code> function.
								But with the exeption, if the string is in the first file of the language
								file list, you don&#8217;t have to include the	filename.<br />
								Example: So let&#8217;s say your first string <var>string1</var> can
								be found in <var>file1.po</var> and <var>string2</var> can be found in <var>file2.po</var>.
								First create a new	object: <code>$object = new Translator('language','file1,file2');</code> Then
								translate	the first string with <code>_('string1')</code> and the second
								string with <code>_('string2','file2')</code> Since <var>string1</var> is
								located in <var>file1.po</var> &#8211; which is the first file in the
								filelist given as a value to the Translator class when creating	the object &#8211; you
								don&#8217;t have to add the filename every time you want to	translate <var>string1</var>,
								but since <var>string2</var> is located in another file you have to add
								the filename as a second argument to the	translate	function.<br />
								For more information on that complicated topic,
								take a look at the user comments	at <a href="http://www.php.net/manual/en/ref.gettext.php">http://www.php.net/manual/en/ref.gettext.php</a>.</li>
				<li>Added a <code>MiddleDate()</code> function, but only added german format
								so	far.</li>
				<li>All settings from the user class are now located in the <var>i18n_settings.ini</var> file.</li>
				<li>Added a simple script to convert translation files to the mysql translation
								table.</li>
</ul>
<h3>1.044 <small class="date">(2003-02-18)</small></h3>
<ul>
				<li>Corrected small bug when detecting the user language. Until now	the <code>getLang()</code> function
								returned the raw locale instead of the language. I corrected this. So
								now there is a <code>getCountry()</code>, <code>getLang()</code> and
								a <code>getLocale()</code> function.</li>
				<li>Also rewrote some parts of the code which resulted in a huge gain of
								speed. The example script now only takes about half of the time to generate,
								then it did	with Version 1.043!</li>
</ul>
<h3>1.043 <small class="date">(2003-02-17)</small></h3>
<ul>
				<li>Rearranged some functions which results in a small gain in speed.</li>
				<li>Also renamed the project to i18n, deleted most of the functions in the
								FormatString class and completely deleted the FormatLongString class
								which didn&#8217;t have anything	to do with i18n.</li>
</ul>
<h3>1.042b <small class="date">(2003-02-13)</small></h3>
<ul>
				<li>Corrected a bug concerning language preferences saved in cookies or session.
								Sadly the performance dropped	a little bit because of that.</li>
</ul>
<h3>1.042 <small class="date">(2003-02-11)</small></h3>
<ul>
				<li>Some small new features: There is a <code>countLanguages()</code> and <code>countStrings()</code> function
								in the ChooseLanguage class now. And I&#8217;ve implemented the possibility
								to use	alias languages. Let&#8217;s say you have a language	directory &#8220;en&#8221; with
								translation	files in it and now you want another language directory &#8220;en_uk&#8221;.
								Instead of translating everything again or copying the translation files
								from one directory to the other all the time you just	place a file called &#8220;redirect&#8221; into
								the &#8220;en_uk&#8221; dir which contains the name of the original language
								folder	(in this case &#8220;en&#8221;).</li>
</ul>
<h3>1.040 <small class="date">(2003-02-06)</small></h3>
<ul>
				<li>Added support for storing the translations in a MySQL database.	I didn&#8217;t
								do a performance test with the mysql modus, but it seems way slower than
								the other two options (gettext, inc files), even though translation requests
								are partly	cached.</li>
				<li>Also took care of a few minor bugs in	the FormatDate	class.</li>
</ul>
<h3>1.031b <small class="date">(2003-01-18)</small></h3>
<ul>
				<li>Added option in the <var>flp_settings.ini</var> file to turn on/off error
								reporting if a	string couldn&#8217;t be translated.</li>
</ul>
<h3>1.031 <small class="date">(2003-01-06)</small></h3>
<ul>
				<li>Corrected some bugs concerning the gettext modus in the Translator	class.</li>
				<li>Also added a sample script.</li>
</ul>
<h2>ToDo</h2>
<ul><li>Someday try to work with shared memory functions, if I ever get a linux
								pc to play with (I'm not really familiar with linux).</li>
</ul>
<p> <strong>Author:</strong> <a href="mailto:flaimo 'at' gmx 'dot' net">Flaimo</a><br />
				<strong>Date:</strong> 2003-08-13<br />
				<strong>URLs:</strong><br />
				<a href="http://sourceforge.net/projects/php-flp/">Project homepage</a><br />
				<a href="http://www.flaimo.com/">Example script </a> </p>
<hr />
<form action="http://www.hotscripts.com/cgi-bin/rate.cgi" method="post"><p>
				<input type="hidden" name="ID" value="19003" />
				<strong>Rate Our Script @ <a href="http://www.hotscripts.com">HotScripts.com</a></strong>
				<select name="ex_rate" size="1">
								<option selected="selected">Select</option>
								<option value="5">Excellent!</option>
								<option value="4">Very Good</option>
								<option value="3">Good</option>
								<option value="2">Fair</option>
								<option value="1">Poor</option>
				</select>
				<input type="submit" value="Go!" /></p>
</form>
<form action="http://www.php-resource.de/vote4.php" method="post" target="new"><p>
				<input type="hidden" name="LKID" value="4122" />
				<input type="hidden" name="act" value="update" />
				<strong>Rate Our Script @ <a href="http://www.php-resource.de">PHP-Resource.de</a></strong>
				<select size="1" name="Votenr">
								<option value="5">5 Stars</option>
								<option value="4">4 Stars</option>
								<option value="3">3 Stars</option>
								<option value="2">2 Stars</option>
								<option value="1">1 Stars</option>
								<option value="0" selected="selected">Vote</option>
				</select>
				<input type="submit" value="Vote" /></p>
</form>
<form method="post" action="http://www.phparchiv.de/cgi-bin/links/ratehome.cgi" target="new"><p>
				<strong>Rate Our Script @ phparchiv.de</strong> (10 is best)
				<input type="hidden" name="ID" value="3961" />
				<select name="R" size="1">
								<option>1 </option>
								<option>2 </option>
								<option>3 </option>
								<option>4 </option>
								<option>5 </option>
								<option>6 </option>
								<option>7 </option>
								<option>8 </option>
								<option>9 </option>
								<option selected="selected">10 </option>
				</select>
				<input type="submit" value="Vote" /></p>
</form>
<hr />
<p>
      <a href="http://validator.w3.org/check/referer"><img
          src="http://www.w3.org/Icons/valid-xhtml10"
          alt="Valid XHTML 1.0!" style="border:0;width:88px;height:31px" /></a>
 <a href="http://jigsaw.w3.org/css-validator/">
  <img style="border:0;width:88px;height:31px"
       src="http://jigsaw.w3.org/css-validator/images/vcss"
       alt="Valid CSS!" />
 </a>

</p>
</body>
</html>
